/*******************************************************************************
  * 文件：TimingCtrl.c
  * 作者：djy
  * 版本：v1.0.0
  * 日期：2020.12.04
  * 说明：定时控制
*******************************************************************************/
#ifndef _TIMING_CTRL_H
#define _TIMING_CTRL_H
    
/* 头文件 *********************************************************************/
#include "Typedefine.h"
#include "Constant.h"
#include "Macro.h"
#include "OS_Timer.h"
#include "DisplayBoard.h"

/* 宏定义 *********************************************************************/
/* 类型定义 *******************************************************************/
typedef enum
{
    eLEFT_TIMING,   // 左灶定时
    eMID_TIMING,    // 中灶定时
    eRIGHT_TIMING,  // 右灶定时
}TimingMode_te;// 定时模式
/* 变量声明 *******************************************************************/

typedef struct
{
    U32         u32TimingMS;    // 定时时长（单位：毫秒，用于计时）
    U16         u16TimingMin;   // 定时时长（单位：分钟，用于显示）
    Bool        bCountDownFlag; // 倒计时运行标志
    Timer_ts    sFlashTimer;    // 参数闪烁定时器
    Timer_ts    sExpireTimer;   // 定时到期定时器
}TimingCtrl_ts;// 灶定时控制

typedef struct
{
    TimingCtrl_ts    asTimingCtrl[3];// 0左、1中、2右定时控制
}DevTiming_ts;
/* 函数声明 *******************************************************************/
void Timing_Hook_1MS(void); // 1MS硬件定时器回调函数
Bool Timing_AddSubKeyPressHook(KeyCtrlType_te eKeyType,TimingMode_te eTimingMode); // 加减按键回调函数

Bool Timing_CheckRightTimingExpire(void); // 查询右灶定时是否到期（定时结束后的十秒内）
Bool Timing_CheckMidTimingExpire(void); // 查询中灶定时是否到期（定时结束后的十秒内）
Bool Timing_CheckLeftTimingExpire(void); // 查询左灶定时是否到期（定时结束后的十秒内）

Bool Timing_CheckRightTimingRun(void); // 查询右灶定时是否在运行 
Bool Timing_CheckMidTimingRun(void); // 查询中灶定时是否在运行
Bool Timing_CheckLeftTimingRun(void); // 查询左灶定时是否在运行

Bool Timing_CheckRightFlashTimerActive(void);// 查询右灶闪烁定时器是否在运行 
Bool Timing_CheckMidFlashTimerActive(void);// 查询中灶闪烁定时器是否在运行
Bool Timing_CheckLeftFlashTimerActive(void);// 查询左灶闪烁定时器是否在运行

U8   Timing_GetLeftTimingTime(void);// 查询左灶定时时间
U8   Timing_GetMidTimingTime(void);// 查询中灶定时时间
U8   Timing_GetRightTimingTime(void); // 查询右灶定时时间

Bool Timing_ChangeLeftTimingTime(U8 u8Time);// 修改左灶定时时间
Bool Timing_ChangeMidTimingTime(U8 u8Time);// 修改中灶定时时间
Bool Timing_ChangeRightTimingTime(U8 u8Time);// 修改右灶定时时间

void Timing_ComfirmRightTimingTime(void);// 确定右灶定时时间
void Timing_ComfirmMidTimingTime(void);// 确定中灶定时时间
void Timing_ComfirmLeftTimingTime(void);// 确定左灶定时时间

void Timing_StopRightTiming(void); // 停止右灶定时
void Timing_StopLeftTiming(void); // 停止左灶定时
void Timing_StopMidTiming(void); // 停止中灶定时

void Timing_StartLeftTiming(U8 u8Time);// 启动左灶定时
void Timing_StartMidTiming(U8 u8Time);// 启动中灶定时
void Timing_StartRightTiming(U8 u8Time);// 启动右灶定时

// 状态机回调API
U32 DevRightTimingCtrl0(U32 arg); // 右灶定时0 
U32 DevRightTimingCtrl1(U32 arg); // 右灶定时1
U32 DevMidTimingCtrl0(U32 arg); // 中灶定时0
U32 DevMidTimingCtrl1(U32 arg); // 中灶定时1
U32 DevLeftTimingCtrl0(U32 arg); // 左灶定时0
U32 DevLeftTimingCtrl1(U32 arg); // 左灶定时1
#endif

